Hibernate একটি ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক, যা জাভা ক্লাসের সাথে রিলেশনাল ডাটাবেসের টেবিলগুলো ম্যাপিং করতে সাহায্য করে। Hibernate ডেটা ম্যানিপুলেশন করার জন্য XML Mapping এবং Annotations দুটি প্রধান পদ্ধতি ব্যবহার করে। এ দুটি পদ্ধতি ডাটাবেসের টেবিলের সাথে ক্লাসের সম্পর্ক স্থাপন করে।
1. XML Mapping
Hibernate-এ XML Mapping হল একটি পদ্ধতি যেখানে ক্লাস এবং টেবিলের মধ্যে সম্পর্ক XML Configuration ফাইলে দেওয়া হয়। এই পদ্ধতিতে, আপনি ক্লাসের fields এবং টেবিলের columns এর মধ্যে সম্পর্ক তৈরী করেন।
XML Mapping উদাহরণ:
Step 1: Hibernate Configuration (hibernate.cfg.xml)
এটি হল Hibernate এর কনফিগারেশন ফাইল যেখানে ডাটাবেসের সংযোগ তথ্য এবং মডেল ক্লাসগুলির mapping দেওয়া থাকে।
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- JDBC Database connection settings -->
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<!-- JDBC connection pool settings -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<!-- Specify the dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Mention annotated class -->
<mapping resource="com/example/hibernate/MyEntity.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Step 2: Entity Class Mapping (MyEntity.hbm.xml)
এটি XML ফাইল যা Java ক্লাস এবং ডাটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করে।
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.example.hibernate.MyEntity" table="MY_ENTITY">
<id name="id" column="ID">
<generator class="increment"/>
</id>
<property name="name" column="NAME"/>
</class>
</hibernate-mapping>
এখানে, MyEntity ক্লাসটি MY_ENTITY টেবিলের সাথে ম্যাপ করা হয়েছে। id ফিল্ডটি টেবিলের ID কলামের সাথে সম্পর্কিত, এবং name ফিল্ডটি NAME কলামের সাথে সম্পর্কিত।
2. Annotations Based Mapping
Hibernate Annotations ব্যবহার করে ক্লাস এবং টেবিলের মধ্যে সম্পর্ক স্থাপন করা আরও সহজ এবং কম কনফিগারেশন সহকারে করা যায়। Hibernate 3.5 এর পর থেকে JPA (Java Persistence API) অ্যানোটেশনগুলি ব্যবহার করা যায়, যা ORM সমর্থন করে এবং এটি ডাটাবেস টেবিলের সাথে মডেল ক্লাসগুলির সম্পর্ক সরাসরি তৈরি করতে সাহায্য করে।
Annotations Based Mapping উদাহরণ:
Step 1: Entity Class (Using Annotations)
এখানে আমরা JPA Annotations ব্যবহার করে Hibernate মডেল ক্লাস তৈরি করছি।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
// Getter and Setter methods
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
এখানে:
@Entity: এই অ্যানোটেশনটি নির্দেশ করে যে এই ক্লাসটি একটি JPA Entity, যা ডাটাবেস টেবিলের সাথে ম্যাপ হবে।@Id: এটি ডাটাবেস টেবিলের প্রাইমারি কী ফিল্ড নির্দেশ করে।@GeneratedValue: এই অ্যানোটেশনটি প্রাইমারি কী ফিল্ডের জন্য ভ্যালু সৃষ্টির কৌশল নির্ধারণ করে।
Step 2: Hibernate Configuration (hibernate.cfg.xml)
এটি আগের মতই, যেখানে Hibernate কনফিগারেশন দেওয়া থাকবে।
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- JDBC and Hibernate Configuration Properties -->
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Mention the annotated class -->
<mapping class="com.example.hibernate.MyEntity"/>
</session-factory>
</hibernate-configuration>
এখানে, <mapping class="com.example.hibernate.MyEntity"/> এর মাধ্যমে MyEntity ক্লাসটি Hibernate কনফিগারেশনে উল্লেখ করা হয়েছে।
XML Mapping vs Annotations Based Mapping
| Feature | XML Mapping | Annotations Based Mapping |
|---|---|---|
| Complexity | আরও বেশি কনফিগারেশন প্রয়োজন | কম কনফিগারেশন এবং ক্লাসে অ্যানোটেশন ব্যবহার করা সহজ |
| Ease of Use | বেশি কনফিগারেশন ফাইল প্রয়োজন | ডিরেক্ট ক্লাসে অ্যানোটেশন ব্যবহার করা সহজ |
| Flexibility | আরও নমনীয় কনফিগারেশন প্রদান করে | অ্যানোটেশনগুলি সহজ ও সোজা, তবে কিছু ক্ষেত্রে সীমিত হতে পারে |
| Maintainability | আলাদা XML ফাইল তৈরি করতে হয় | কোডের সাথে একই ফাইলে সবকিছু থাকে |
| Performance | প্রায় সমান কার্যক্ষমতা | খুব সামান্য পারফরম্যান্স পার্থক্য |
| Learning Curve | কিছুটা সময় নেয় অভ্যস্ত হতে | দ্রুত শিখতে এবং ব্যবহার করতে সুবিধাজনক |
Hibernate ডাটাবেসের সাথে কাজ করার জন্য XML Mapping এবং Annotations Based Mapping দুটি গুরুত্বপূর্ণ পদ্ধতি প্রদান করে।
- XML Mapping পদ্ধতি অধিক কনফিগারেশন এবং নমনীয়তা প্রদান করে, তবে এতে আরও বেশি কাজের প্রয়োজন।
- Annotations Based Mapping জাভা ক্লাসে সরাসরি অ্যানোটেশন ব্যবহার করে কোডকে পরিষ্কার এবং কমপ্যাক্ট রাখে।
আপনার প্রোজেক্টের প্রয়োজন এবং ব্যবহারের সহজতা অনুযায়ী আপনি যেকোনো একটি পদ্ধতি নির্বাচন করতে পারেন।
Read more